%{
	#include <math.h>
	#include "portal.h"
	int linesCounter = 1;
%}

procedimento "procedimento"
funcao "funcao"
de "de"
vetor "vetor"
letra [a-z]
texto "\""[^\'\n]*"\""
delimitador ";"|","|"."|"("|")"|"["|"]"|":"
sinal "+"|"-"
digito [0-9]
tamanho ("["({digito})+"]")+
const_inteira ({sinal})?({digito})+
const_real ({sinal})?({digito})+"."({digito})+
operador "+"|"-"|"*"|"/"|"E"|"OU"|"NAO"|"DIV"|"MOD"|"<"|">"|"="|"<>"|">="|"<="|":="
identificador {letra}({letra}|{digito})*

%%


"{"[^}\n]*"}" {
	printf( "Comentário\n");
}

" " {
	printf("Espaço em branco\n");
}

\n {
	printf("Nova Linha\n");
	linesCounter++;
}

\t  {
	printf("tabulacao\n");
}

{vetor} {
	printf("Vetor (%s)\n", yytext);
	return T_VETOR;
}

{de} {
	printf("DE (%s)\n", yytext);
	return T_DE;
}

{funcao} {
	printf("Funcao (%s)\n", yytext);
	return T_FUNCAO;
}

{procedimento} {
	printf("Procedimento (%s)\n", yytext);
	return T_PROCEDIMENTO;
}

{tamanho} {
	printf("Tamanho (%s)\n", yytext);
	return T_TAMANHO;
}

{delimitador} {
	printf("Delimitador (%s)\n", yytext);
	return T_DELIMITADOR;
}

{const_inteira} {
	printf("Inteiro: %s\n", yytext);
	return T_CONST_INTEIRA;
}

{const_real} {
	printf("Real: %s\n", yytext);
	return T_CONST_REAL;
}

{texto} {
	printf("Texto (%s)\n", yytext);
	return T_TEXTO;
}

{operador} {
	printf("Operador (%s)\n", yytext);
	return T_OPERADOR;
}

escreva {
	printf("Escreva\n");
	return T_ESCREVA;
}

programa {
	printf("Programa\n");
	return T_PROGRAMA;
	
}

inicio {
	printf("Inicio\n");
	return T_INICIO;
}

fim {
	printf("Fim\n");
	return T_FIM;
}

{identificador} {
	printf("Ident (%s)\n", yytext);
	return T_IDENTIFICADOR;
}




%%

main( argc, argv )
int argc;
char **argv;
{
	++argv, --argc; /* skip over program name */
	if ( argc > 0 )
		yyin = fopen( argv[0], "r" );
	else
		yyin = stdin;
	yylex();
}
